package com.tian.print.http.request;

import com.tian.print.app.AppConfig;
import com.tian.print.bean.CustomerMd;
import com.tian.print.bean.GoodsModel;
import com.tian.print.bean.KeyTypeMd;
import com.tian.print.bean.LocationMd;
import com.tian.print.bean.PersonMd;
import com.tian.print.bean.SaveResonpse;
import com.tian.print.bean.UseMd;
import com.tian.print.bean.UserInfo;
import com.tian.print.http.response.Response;
import com.tian.print.http.RetrofitClient;

import java.util.ArrayList;

import io.reactivex.Observable;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;

/**
 * Description: 接口列表,注意事项
 * <pre>
 *    BaseUrl 和URL有关的注解中提供的值 最后结果
 *    http://localhost:4567/path/to/other/ /post http://localhost:4567/post
 *    http://localhost:4567/path/to/other/ post http://localhost:4567/path/to/other/post
 *    http://localhost:4567/path/to/other/ https://github.com/ikidou https://github.com/ikidou
 *    从上面不能难看出以下规则：
 *    如果你在注解中提供的url是完整的url，则url将作为请求的url。
 *    如果你在注解中提供的url是不完整的url，且不以 / 开头，则请求的url为baseUrl+注解中提供的值
 *    如果你在注解中提供的url是不完整的url，且以 / 开头，则请求的url为baseUrl的主机部分+注解中提供的值
 * Author：skyTian
 * Time:2017/11/1 10:36
 * CopyRight:com,sky
 */
public interface ApiRequest {

    ApiRequest apiClent = RetrofitClient.getInstance().create(ApiRequest.class);

    /**
     * 登录
     *
     * @param account
     * @param password
     * @param dataSetId
     * @param loginUserType
     * @return
     */
    @POST(AppConfig.LOGIN_IN)
    Observable<Response<UserInfo>> login(@Query("account") String account, @Query("password") String password,
                                         @Query("dataSetId") String dataSetId, @Query("loginUserType") String loginUserType);

    /**
     * 入库操作
     *
     * @return
     */
    @POST(AppConfig.SAVE_MODEL)
    Observable<Response<SaveResonpse>> saveMd(@Body GoodsModel model);

    /**
     * 出库操作
     *
     * @return
     */
    @POST(AppConfig.OUT_OF_STOCK)
    Observable<Response<String>> outOfStock(@Query("plateNoOld") String plateNoOld, @Query("useState") String useState);

    /**
     * 根据版号查询
     *
     * @return
     */
    @POST(AppConfig.LOAD_MD)
    Observable<Response<GoodsModel>> queryGoods(@Query("plateNoOld") String plateNoOld);


    /**
     * 获取业务员
     *
     * @return
     */
    @GET(AppConfig.GET_PERSON_MDS)
    Observable<Response<ArrayList<PersonMd>>> getPersonMds();

    /**
     * 获取客户
     *
     * @return
     */
    @GET(AppConfig.GET_CUSTOMER_MDS)
    Observable<Response<ArrayList<CustomerMd>>> getCustomerMds(@Query("ywyCode") String personCode);

    /**
     * 获取仓库地址
     *
     * @return
     */
    @GET(AppConfig.GET_LOCATION_MDS)
    Observable<Response<ArrayList<LocationMd>>> getLocationMds();

    /**
     * 获取用途
     *
     * @return
     */
    @GET(AppConfig.GET_USE)
    Observable<Response<ArrayList<UseMd>>> getUseMds();

    /**
     * 获取键类型
     *
     * @return
     */
    @GET(AppConfig.GET_KEYTYPE)
    Observable<Response<ArrayList<KeyTypeMd>>> getKeyType();
}
